4.1. Основные понятия

Выполнение любой функции, возложенной на информационную систему, возможно только при соответствующем взаимодействии аппаратных и программных средств. Поэтому при анализе надежности выполнения системой заданных функций необходимо рассматривать систему как единый комплекс аппаратных и программных средств и учитывать, что надежность работы информационной системы зависит как от надежности аппаратуры, так и от надежности программного обеспечения.

надежности программного обеспечения, учитывая следующие различия между надежностью аппаратуры и программного обеспечения:

Элементы программного обеспечения не стареют из-за износа или усталости;

В аппаратуре использование стандартных элементов распространено намного шире, чем в системе программного обеспечения;

Количество документации по программному обеспечению гораздо больше по сравнению с количеством документации для аппаратных средств;

Ввести изменения в программы просто, но трудно сделать это корректно.

Надежность программного обеспечения - свойство программы выполнять заданные функции, сохранять свои характеристики в установленных пределах при определенных условиях эксплуатации. Надежность программного обеспечения определяется его безотказностью и восстанавливаемостью.

Безотказность программного обеспечения или программы – свойство программы сохранять работоспособность при использовании в процессе обработки информации. Безотказность программного обеспечения можно оценить вероятностью его работы без отказов при определенных условиях внешней среды в течение заданного периода наблюдения. В данном определении под отказом программного обеспечения понимается недопустимое отклонение характеристик процесса функционирования программы от требуемых. Определенные условия внешней среды понимаются как совокупность входных данных и состояния вычислительной системы. Заданный период наблюдения, как правило, соответствует необходимому для выполнения программы.

Безотказность программного обеспечения можно также характеризовать средним временем между возникновениями отказов в процессе функционирования программы. При этом предполагается, что аппаратура информационной системы находится полностью в работоспособном состоянии.

С точки зрения надежности принципиальное отличие программного обеспечения от аппаратуры состоит в том, что программное обеспечение не изнашивается и его выход из строя из-за поломки невозможен. Поэтому характеристики функционирования программного обеспечения зависят только от его качества.

В значительной степени на функционирование программного обеспечения влияют входные данные. Так проявление ошибок программного обеспечения связано с тем, что в некоторые моменты времени на обработку поступают ранее не встречавшиеся совокупности данных, которые программа не в состоянии корректно обработать.

На рис.4.1 показана зависимость, отражающая изменение во времени надежности программы.

Рисунок 4.1. Изменение надежности программы во времени


Увеличение надежности программы является следствием того, что в процессе эксплуатации обнаруживаются и устраняются скрытые ошибки. Правда, при этом могут возникать так называемые ошибки второго рода, связанные с внесением новых ошибок в процессе устранения старых.

Важной характеристикой надежности программного обеспечения является его восстанавливаемость, которая определяется затратами времени и труда на устранение отказа из-за проявившейся ошибки в программе и его последствий. Восстановление после отказа в программе может заключаться в корректировке и восстановлении текста программы, исправлении данных, внесения изменений в организацию вычислительного процесса.

Восстанавливаемость программного обеспечения может быть оценена средней продолжительностью устранения ошибки в программе и восстановления ее работоспособности. Восстанавливаемость программного обеспечения зависит от многих факторов, в том числе от сложности структуры комплекса программ, структурированности самих программ, языка программирования, на котором разрабатывалась программа, стиля программирования, качества документации на программу и т.д.

Можно также говорить об устойчивости функционирования программного обеспечения.

Устойчивость функционирования – способность программы ограничивать последствия собственных отказов и неблагоприятных воздействий внешней среды (неисправность аппаратуры, некорректность входных данных, ошибки оператора) или противостоять им.

Устойчивость программного обеспечения может быть повышена с помощью разных форм структурной, информационной и временной избыточности (дублирующие модули программ, альтернативные программы для решения одних и тех же задач, контроль за процессом исполнения программы).


4.2. Причины отказов программного обеспечения

Основными причинами, непосредственно вызывающими нарушения нормального функционирования программы являются:

• ошибки, скрытые в самой программе;

• искажения входной информации, подлежащей обработке;

• неверные действия пользователя;

• неисправности аппаратуры, на которой реализуется вычислительный процесс.

Скрытые ошибки программы. В процессе отладки сложных программных средств невозможно обнаружить и ликвидировать все ошибки. В результате в программах остается некоторое количество скрытых ошибок. Они могут вызвать неверное функционирование программ при определенных сочетаниях входных данных. Наличие скрытых ошибок программного обеспечения является главным фактором нарушения нормальных условий его функционирования.

Можно выделить следующие основные классы ошибок в программах:

Искажение информации, подлежащей обработке, вызывает нарушение функционирования программного обеспечения, когда входные данные не попадают в область допустимых значений переменных программы. В этом случае между исходной информацией и характеристиками программы возникает несоответствие.

Причинами искажения вводимой информации могут быть следующие: сбои и отказы в аппаратуре ввода данных, шумы и сбои в каналах связи при передаче сообщений по линиям связи, сбои и отказы в аппаратуре передачи или приема информации, ошибки пользователей при подготовке исходной информации и т.д.

Неверные действия пользователя, приводящие к отказу в процессе функционирования программного обеспечения, связаны прежде всего с неправильной интерпретацией сообщений, с неправильными действиями пользователей в процессе работы с системой и т.д.

Отказы программного обеспечения, обусловленные ошибками пользователя, называют ошибками использования. Часто эти ошибки являются следствием некачественной программной документации (неверное описание возможностей программы, режимов работы, форматов входной и выходной информации, диагностических сообщений и т.д.).

Неисправность аппаратуры. Появление отказа или сбоя в работе аппаратуры приводит к нарушению нормального хода вычислительного процесса и во многих случаях – к искажению данных и текстов программ в основной и внешней памяти.

В настоящее время имеется представительная статистика об ошибках программного обеспечения и их причинах. Процентные частоты причин появления ошибок различного типа приведены в табл.4.1

Таблица 4.1 Ошибки программного обеспечения и частота их появления

Причина ошибки

Частота появления, %

Неполное или ошибочное задание

28

Отклонение от задания

12

Пренебрежение правилами программирования

10

Ошибочная выборка данных

10

Ошибочная логика или последовательность операций

12

Ошибочные арифметические операции

9

Нехватка времени для решения

4

Неправильная обработка прерываний

4

Неправильные постоянные или исходные данные

3

Неточная запись

8


Всесторонний анализ ошибок, встречающихся в программах, возможен только при наличии точных данных об отказах программ, причинах отказов, о самих программах и условиях их разработки (квалификации программиста, сроки разработки и др.).

Эти данные являются основой для построения математических моделей надежности программ с целью ее оценки и прогнозирования, а также для нахождения путей ее обеспечения и повышения.


4.3. Последствия и признаки появления ошибок в программе

Следствием появления ошибок в программе является ее отказ, заключающийся в отклонении от выполнения программой заданных функций. В зависимости от степени серьезности ошибок (отказов) эти отклонения можно разделить следующим образом:

• полное прекращение выполнения функций на длительное или неопределенное время;

• кратковременное нарушение хода вычислительного процесса.

Степень серьезности последствий ошибок в программе может быть оценена соотношением между длительностью восстановительных работ, которые необходимо произвести после отказа в программе, и динамическими характеристиками объектов, использующих результаты работы программных средств. К таким характеристикам объектов относятся, например, заданная частота решения задач обработки информации, заданное время реакции вычислительной системы на запросы пользователей и др.

Наиболее типичными симптомами появления ошибок в программе являются:

• преждевременное (аварийное) окончание выполнения программы;

• недопустимое увеличение времени выполнения программы;

• зацикливание на выполнении некоторой последовательности команд одной из программ;

• полная потеря или значительное нарушение накопленных данных, необходимых для успешного выполнения решаемых задач;

• нарушение последовательности вызова отдельных программ, в результате чего происходит пропуск необходимых программ либо непредусмотренное обращение к программам;

• искажение отдельных элементов данных (входных, выходных, промежуточных) в результате обработки искаженной исходной информации.


4.4. Модели надежности программ

Аналитические модели надежности дают возможность исследовать закономерности проявления ошибок в программе, а также прогнозировать ее надежность при разработке и эксплуатации. Модели надежности программ строятся на предположении, что проявление ошибки является случайным событием и поэтому имеет вероятностный характер.

Для построения моделей используются следующие характеристики надежности программ:

функция надежности P(t), определяемая как вероятность того, что ошибка программы не проявится на интервале от 0 до t, т.е. время ее безотказной работы будет больше t;

функция ненадежности Q(t) – вероятность того, что в течение времени t произойдет отказ программы в результате проявления ошибки в программе. Следовательно

(40)

интенсивность отказов - условная плотность вероятности времени до возникновения отказа программы при условии, что до момента t отказа не было.

(41)

средняя наработка до отказа – математическое ожидание временного интервала между последовательными отказами.

В настоящее время основными типами применяемых моделей надежности программ являются модели, основанные на предположении о дискретном изменении характеристик надежности программ в момент устранения ошибок, а также модели, основанные на экспоненциальном характере изменения числа ошибок в зависимости от времени тестирования и функционирования программы.

4.4.1. Модель надежности программ дискретно-понижающая интенсивность проявления ошибок.

В этой модели предполагается, что интенсивность обнаружения ошибок описывается кусочно-постоянной функцией, пропорциональной числу не устраненных ошибок, т.е. интенсивность отказов постоянна до обнаружения и устранения ошибки, после чего она опять становится константой, но с другим, меньшим значением. При этом предполагается, что между и числом оставшихся в программе ошибок существует зависимость

(41)

где M – неизвестное первоначальное число ошибок; - число обнаруженных ошибок, зависящее от времени t; K – некоторая константа (рис.4.2)

Рисунок 4.2. Зависимость интенсивности отказов программы от времени


Плотность распределения времени обнаружения i- ой ошибки ti задается соотношением

(42)

Значение неизвестных параметров K и M может быть оценено на основании последовательности наблюдений интервалов между моментами обнаружения ошибок по методу максимального правдоподобия. При этом для нахождения оценок параметров K и M необходимо решить следующие уравнения:

(43)

(44)

где ; ; ; и - оценки соответственно К и М;

m – число устраненных ошибок в момент оценки надежности программ.

Рассмотренная модель надежности программ является достаточно грубой. На практике часто не соблюдаются условия, на которых она построена. Нередко при устранении ошибки вносятся новые ошибки. Не всегда удается определить и устранить причину отказа, и программу часто продолжают использовать, так как при других исходных данных ошибка, вызвавшая отказ, может себя не проявить.

Модель надежности программ с дискретным увеличением времени наработки на отказ. Модель построена на предположении, что устранение ошибки в программе приводит к увеличению времени наработки на отказ на одну и ту же случайную величину.

Предполагается, что время между двумя последовательными отказами является случайной величиной, которую можно представить в виде суммы двух случайных величин:

(45)

где случайные величины независимы и имеют одинаковое математическое ожидание и средние квадратичные отклонения

Из этой формулы следует, что m-й отказ программы произойдет через время

(46)

Предполагаем также, что

(47)

Основанием для такого предположения является то, что отказы программы в начальном периоде эксплуатации возникают часто. В этом случае можно считать, что

При этих предположениях средняя наработка между (m-1)–м и m-м отказами программы равна:

(48)

а средняя наработка до возникновения m-го отказа программы определяется следующим выражением:

(49)

Оценки величины и могут быть получены по данным об отказах программы в течение периода наблюдения tн следующим образом:

(50)

(51)

где mн – число отказов за период (0,tн), ti – момент возникновения i-го отказа программы.

Функция надежности определяется в зависимости от числа возникших отказов:

(52)

где Ф(х) – функция Лапласа.


4.4.2. Экспоненциальная модель надежности программ.

Модель основана на предположении об экспоненциальном характере изменения во времени числа ошибок в программе.

В этой модели прогнозируется надежность программы на основе данных, полученных во время тестирования. В модели вводится суммарное время функционирования t, которое отсчитывается от момента начала тестирования программы (с устранением обнаруженных ошибок) до контрольного момента, когда производится оценка надежности.

Предполагается, что все ошибки в программе независимы и проявляются в случайные моменты времени с постоянной средней интенсивностью в течение всего времени выполнения программы. Это означает, что число ошибок, имеющихся в программе в данный момент, имеет пуассоновское распределение, а временной интервал между двумя программами распределен по экспоненциальному закону, параметр которого изменяется после исправления ошибки.

Основное отличие данной модели от предыдущих состоит в том, что интенсивность отказов предполагается непрерывной функцией. Это упрощает математическое описание модели, а модель приобретает дополнительную гибкость.

Пусть M – число ошибок, имеющихся в программе перед фазой тестирования (M рассматривается как некоторая константа); m(t) –конечное число исправленных ошибок; m0(t) – число оставшихся ошибок. Тогда

(53)

При принятых предположениях интенсивность отказов пропорциональна m0(t), т.е.

(53)

где C – коэффициент пропорциональности, учитывающий реальное быстродействие системы и число команд в программе.

Перед началом работы системы (t = 0) ни одна ошибка исправлена не была (t = 0), поэтому

(54)

Будем характеризовать надежность программы после тестирования в течение времени t средним временем наработки на отказ:

(55)

Следовательно,

(56)

Введем - исходное значение среднего времени наработки на отказ перед тестированием. Тогда

(57)

В результате имеем

(58)

Очевидно, что среднее время наработки на отказ увеличивается по мере выявления и исправления ошибок.


4.5. Способы обеспечения и повышения надежности программ

Способы повышения и обеспечения надежности программ могут быть разделены на следующие основные категории:

• Усовершенствование технологии программирования;

• Выбор алгоритмов, не чувствительных к различного рода нарушениям вычислительного процесса (использование алгоритмической избыточности);

• Резервирование программ – дуальное и N-версионное программирование, другие методы введения структурной избыточности;

• Контроль и тестирование программ с последующей коррекцией.

• Выбор алгоритмов, не чувствительных к нарушениям вычислительного процесса основан на исследовании их чувствительности. Мерой чувствительности могут являться погрешности, вызванные этими нарушениями.

Результаты вычислений искажаются погрешностями:

• округления;

• методическими;

• обусловленными отказами, сбоями и ошибками в программах.

Эти погрешности могут быть во многих случаях оценены теоретически, однако, в общем случае проще определить их методом цифрового моделирования вычислительных процессов и источников погрешностей.

Как правило, ошибки, обусловленные недостаточной точностью вычислений, составляют в общем количестве ошибок небольшую долю. Это обстоятельство объясняется, с одной стороны, тем, что разрядность технической системы в большинстве случаев выбирается со значительным запасом. С другой стороны, отказы, обусловленные недостаточной точностью, легко обнаруживать и устранять. Остальные же ошибки, приведенные в табл.1, вызваны в основном трудно обнаруживаемыми ошибками программирования.

Такие ошибки могут быть обнаружены и устранены путем тщательной отладки и тестирования программы. Считается, что более эффективна борьба с такими ошибками путем профилактики, что достигается улучшением технологии программирования.

Осознание того факта, что надежность программы, которая может быть достигнута технологическими мерами, ограничена, вызвало необходимость обеспечения или повышения надежности программ путем резервирования. Для этого подготавливаются две или несколько версий программ для решения одной и той же задачи. Желательно, чтобы эти версии значительно отличались друг от друга, т.е. основывались по возможности на различных алгоритмах или были бы по крайней мере выполнены различными программистами. В этом случае ошибки могут быть обнаружены по расхождению результатов, полученных при одних и тех же исходных данных по различным версиям программ. Однако, в ходе отладки программы проверить все возможные комбинации исходных данных или все возможные последовательности прохождения элементов программы невозможно. Поэтому было предложена идея параллельного (одновременного) или последовательного во времени выполнения различных версий программ непосредственно в процессе эксплуатации. Если таких версий две, принято говорить о дуальном программировании.

При дуальном программировании результаты сравниваются соответствующими аппаратными или программными средствами и, если обнаруживается расхождение в результатах, необходимо определить по каким-либо дополнительным критериям какой из результатов правильный и отбросить другой результат. При N-версионном программировании подготавливается N версий программ, и правильный результат определяется по мажоритарному признаку при помощи аппаратных или программных средств.

При дуальном или N-версионном программировании требуется соответственно в два или N раз больше аппаратуры, или в два или N раз больше времени для вычислений, если они выполняются последовательно во времени. Кроме того, возрастает во столько же раз объем труда программистов и стоимость программы.

Поэтому представляет интерес модифицированное дуальное программирование, где наряду с достаточно точной, но сложной основной программой используется менее точная, но простая резервная программа. Если при одинаковых исходных данных результаты программ отличаются на величину большую, чем допустимая погрешность, делается предположение о том, что отказала основная программа, как менее надежная, и в качестве правильного результата принимается результат, полученный при помощи резервной программы. В результате средняя погрешность работы двух программ несколько увеличивается, а вероятность отказа уменьшается.

Обозначим погрешность первой программы через δ1 и допустимую погрешность второй программы через δ2. Пусть вероятность отказа первой программы составляет q1 и второй программы – q2. При независимости этих программ возможны следующие несовместимые события:

1) обе программы работают безотказно, вероятность этого события , погрешность результата - δ1;

2) откажет основная программа; вероятность этого события , погрешность результата - δ2;

3) откажет резервная программа; вероятность этого события , погрешность результата δ3;

4) откажут и основная и резервная программы; вероятность этого события , погрешность δ3.

Следовательно, погрешность отказавшей системы из двух программ , при вероятности отказа системы .


4.6. Расчет показателей надежности

Расчет показателей надежности невосстанавливаемых нерезервированных систем

В качестве объекта, надежность которого требуется определить, рассмотрим некоторую сложную систему S, состоящую из отдельных элементов (блоков). Задача расчета надежности сложной системы состоит в том, чтобы определить ее показатели надежности, если известны показатели надежности отдельных элементов и структура системы, т.е. характер связей между элементами с точки зрения надежности.

Наиболее простую структуру имеет нерезервированная система, состоящая из n элементов, у которой отказ одного из элементов приводит к отказу всей системы. В этом случае система S имеет логически последовательное соединение элементов (рис.4.3).

Рисунок 4.3 Схема логического соединения элементов нерезервированной системы


Методы расчета

В зависимости от полноты учета факторов, влияющих на работу изделия, различают ориентировочный и полный расчет показателей надежности.

При ориентировочном расчете показателей надежности необходимо знать структуру системы, номенклатуру применяемых элементов и их количество. Ориентировочный расчет учитывает влияние на надежность только количества и типов, входящих в систему элементов, и основывается на следующих допущениях:

- все элементы данного типа равнонадежны, т.е. величины интенсивности отказов () для этих элементов одинаковы;

- все элементы работают в номинальном (нормальном) режиме, предусмотренном техническими условиями;

- интенсивности отказов всех элементов не зависят от времени, т.е. в течение срока службы у элементов, входящих в изделие, отсутствует старение и износ, следовательно ;

- отказы элементов изделия являются событиями случайными и независимыми;

- все элементы изделия работают одновременно.

Ориентировочный метод расчета используется на этапе эскизного проектирования после разработки принципиальных электрических схем изделий и позволяет наметить пути повышения надежности изделия.

Пусть отказы элементов есть независимые друг от друга события. Так как система работоспособна, если работоспособны все ее элементы, то согласно теореме об умножении вероятностей вероятность безотказной работы системы Рс(t) равна произведению вероятностей безотказной работы ее элементов:

(59)

где - вероятность безотказной работы i-го элемента.

Пусть для элементов справедлив экспоненциальный закон распределения надежности и известны их интенсивности отказов. Тогда и для системы справедлив экспоненциальный закон распределения надежности:

(60)

где - интенсивность отказов системы.

Интенсивность отказов нерезервированной системы равна сумме интенсивностей отказов ее элементов:

(61)

Если все элементы данного типа равнонадежны, то интенсивность отказов системы будет

(62)

где: Ni - число элементов i-го типа; r – число типов элементов.

Выбор для каждого типа элементов производится по соответствующим таблицам.

Среднее время наработки до отказа и частота отказов системы соответственно равны:

(63)

На практике очень часто приходится вычислять вероятность безотказной работы высоконадежных систем. При этом произведение значительно меньше единицы, а вероятность безотказной работы P(t) близка к единице. В этом случае количественные характеристики надежности можно с достаточной для практики точностью вычислить по следующим приближенным формулам:

(64)

При расчете надежности систем часто приходится перемножать вероятности безотказной работы отдельных элементов расчета и возводить их в степень. При значениях вероятность P(t), близких к единице, эти вычисления можно с достаточной для практики точностью выполнить по следующим приближенным формулам:

(65)

где - вероятность отказа i-го блока.

Полный расчет показателей надежности изделия выполняется тогда, когда известны реальные режимы работы элементов после испытания в лабораторных условиях макетов изделия.

Элементы изделия находятся обычно в различных режимах работы, сильно отличающихся от номинальной величины. Это влияет на надежность как изделия в целом, так и отдельных его составляющих частей. Выполнение окончательного расчета параметров надежности возможно только при наличии данных о коэффициентах нагрузки отдельных элементов и при наличии графиков зависимости интенсивности отказов элементов от их электрической нагрузки, температуры окружающей среды и других факторов, т.е. для окончательного расчета необходимо знать зависимости

(66)

Эти зависимости приводятся в виде графиков либо их можно рассчитать с помощью так называемых поправочных коэффициентов интенсивности отказов .

При разработке и изготовлении элементов обычно предусматриваются определенные, так называемые «нормальные» условия работы. Интенсивность отказов элементов в «нормальном» режиме эксплуатации называется номинальной интенсивностью отказов .

Интенсивность отказов элементов при эксплуатации в реальных условиях равна номинальной интенсивности отказов , умноженной на поправочные коэффициенты , т.е.

(67)

где: - интенсивность отказов элемента, работающего в нормальных условиях при номинальной электрической нагрузке; - поправочные коэффициенты, зависящие от различных воздействующих факторов.

Полный расчет надежности применяется на этапе технического проектирования изделия.